//
//  AGDatabaseManager.h
//
//  Created by Ager on 15/11/10.
//  Copyright © 2015年 Ager. All rights reserved.
//


/**
 *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查
 *
 *  基于 FMDB
 *
 *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作
 *
 *  根据 model 对象自动建表,字段类型只支持 NSString , NSIteger , float
 *
 *  用到 runtime 运行时获取 model 属性
 *
 */

#import <Foundation/Foundation.h>

@interface AGDatabaseManager : NSObject

+ (AGDatabaseManager*)shareAGDatabaseManager;

/**
 *  创建表格
 *
 *  @param cls    model 类
 *  @param tbName 表名
 *  @param keyName 主键字段
 *  @param key    主键的属性设置
 *
 *  @return 创建表格是否成功
 */
- (BOOL)creatTable:(Class)cls tableName:(NSString*)tbName keyName:(NSString*)keyName primaryKey:(NSString*) key;


/**
 *  向表格插入数据
 *
 *  @param model  数据模型与数据库表格对应
 *  @param tbName 要操作的表名
 *
 *  @return 添加是否成功
 */
- (BOOL)insert:(id)model tableName:(NSString*)tbName;


/**
 *  更新数据
 *
 *  @param tbName 要操作的表名
 *  @param model 数据模型与数据库表格对应
 *  @param str   更新操作查要更新的数据的条件
 *
 *  @return 更新是否成功
 */
- (BOOL)update:(id)model tableName:(NSString*)tbName where:(NSString*)str;


/**
 *  删除数据
 *
 *  @param tbName 要删除数据的表名
 *  @param str    要删除的数据的查找条件
 *
 *  @return 删除是否成功
 */
- (BOOL)deleteTableName:(NSString*)tbName where:(NSString*)str;


/**
 *  查询数据
 *
 *  @param model  数据模型与数据库表格对应
 *  @param tbName 要操作的表名
 *  @param str    删除操作查要删除的数据的条件
 *
 *  @return 查询结果 (数组每一项为字典)
 */
- (NSArray*)select:(Class)model tableName:(NSString*)tbName where:(NSString*)str;


/**
 *  查询全部数据
 *
 *  @param model  数据模型与数据库表格对应
 *  @param tbName 要操作的表名
 *
 *  @return 查询结果 (数组每一项为字典)
 */
- (NSArray*)selectALL:(Class)model tableName:(NSString*)tbName;




@end
